package pvn.com.controls.marketwatch;

import pvn.com.ParamsStorage;
import pvn.com.interfaces.IObjectMessageListener;
import pvn.com.locale.Planex1TraderResource;
import pvn.com.screens.TitleScreen;

import net.rim.device.api.i18n.ResourceBundle;
import net.rim.device.api.system.Bitmap;
import net.rim.device.api.ui.Graphics;
import net.rim.device.api.ui.Screen;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.ListField;
import net.rim.device.api.ui.component.ObjectListField;
import net.rim.device.api.ui.decor.Background;
import net.rim.device.api.ui.decor.BackgroundFactory;

public class MarketWatch extends ObjectListField implements Planex1TraderResource {

    /** Thuộc tính normal background. */
    private Background bgNormal = BackgroundFactory.createBitmapBackground(
            Bitmap.getBitmapResource("images/grid/row_bg.png"), 0, 0, 4);

    /** Thuộc tính background khi được chọn. */
    private Background bgSelected = BackgroundFactory.createBitmapBackground(
            Bitmap.getBitmapResource("images/grid/row_bg_sel.png"), 0, 0, 4);

    /** Thuộc tính background của header. */
    private Background bgHeader = BackgroundFactory.createBitmapBackground(
            Bitmap.getBitmapResource("images/grid/header_row_bg.png"), 0, 0, 4);

    /** Thuộc tính chứa số phần symbol. */
    private int itemsCount = 0;

    /** Thuộc tính fix chiều cao row. */
    private boolean fixedRowHeight = true;

    /** Chiều cao row normal. */
    private int NORMAL_ROW_HEIGHT = 45;

    /** Chiều cao của row header. */
    private int HEADER_ROW_HEIGHT = 30;

    // TODO --- Find not found : com.fxpro.locale.FxProTrader
    protected ResourceBundle resource = ResourceBundle.getBundle(BUNDLE_ID,
            "com.fxpro.locale.FxProTrader");

    /** Label: Bid */
    public static String cellBid;

    /** Label: Ask */
    public static String cellAsk;

    /** Chiều rộng tính theo pixel của symbol name khi đã được vẽ trên màn hình. */
    public static int symbolNameWidth = 0;

    /** Biến kiểm tra trạng thái focus. */
    public boolean controlMoveFocus = false;

    /** */
    private static Class class$0;

    /**
     * Hàm khởi tạo.<br>
     * 
     * @param flgFixedRowHeight
     *            : true|false. <br>
     *            Thực hiện việc fix chiều cao row.
     */
    public MarketWatch(boolean flgFixedRowHeight) {
        super(1152921504606912512L);
        setCallback(this);
        setRowHeight(NORMAL_ROW_HEIGHT);
        fixedRowHeight = flgFixedRowHeight;

        cellBid = resource.getString(RATES_BID);
        cellAsk = resource.getString(RATES_ASK);
    }

    /**
     * Hàm thực hiện xóa đi tất cả các dòng trong listItem.<br>
     * 
     */
    public void clear() {
        int size = getSize();
        for (int i = 0; i < size; i++) {
            delete(size - i - 1);
        }
        itemsCount = 0;
        setSize(itemsCount);
    }

    /**
     * Hàm thực hiện thêm vào một row.
     * 
     * @param cell
     */
    public void addCell(MarketWatchCell cell) {

        // 1. Thiết lập background.
        cell.setBackgrounds(bgNormal, bgSelected, bgHeader);

        // 2. Thêm vào row.
        insert(getSize(), cell);
        itemsCount += 1;

        // 3.Khi không thực hiện fix chiều cao của row.
        if (!fixedRowHeight) {
            int rowHeight = 0;

            // 3.1. Khi row là row header.
            if (cell.type == MarketWatchCell.TYPE_HEADER_CELL) {
                rowHeight = HEADER_ROW_HEIGHT;
            }

            // 3.2. Khi row không phải là row header.
            else {
                rowHeight = NORMAL_ROW_HEIGHT;
            }

            // 3.3. Set chiều cao của row.
            setRowHeight(getSize() - 1, rowHeight);
        }

        // 4. Thiết lập kích thước của list item.
        setSize(itemsCount);
    }

    public int indexOfList(ListField list, String p, int s) {

        // TODO --- Trả về giá trị return.
        return ParamsStorage.FavSymbols.indexOf(p, s);
    }

    public void drawListRow(ListField list, Graphics graphics, int index, int y, int w) {
        MarketWatchCell currentRow = (MarketWatchCell) get(list, index);
        currentRow.drawListRow(graphics, index, y, w, getSelectedIndex() == index,
                getRowHeight(index));
    }

    protected boolean navigationClick(int status, int time) {
        // if (UiApplication.getUiApplication().getActiveScreen().getLeafFieldWithFocus() != this)
        // return false;
        // MarketWatchCell currentRow = (MarketWatchCell) get(this, getSelectedIndex());
        //
        // IObjectMessageListener ui = (IObjectMessageListener) UiApplication.getUiApplication();
        // ui.OnMsg(13, 0, currentRow.id);

        return true;
    }

    /**
     * Hàm thực hiện xử lý khi di chuyển focus xuống.<br>
     * 
     * @return false : Khi vị trí hiện tại > số symbol -1. <br>
     *         true : Khi vị trí hiện tại < số symbol -1.<br>
     */
    public boolean canMoveDown() {
        return getSelectedIndex() < this.itemsCount - 1;
    }

    public boolean canMoveUp() {
        return getSelectedIndex() > 0;
    }

    public int GetSelectedIndex() {
        return getSelectedIndex();
    }

    public void onFocus(int direction) {
        super.onFocus(direction);
        if (fixedRowHeight) {
            return;
        }

        setSelectedIndex(1);
    }

    public int moveFocus(int amount, int status, int time) {
        int res = super.moveFocus(amount, status, time);
        if (!this.controlMoveFocus)
            return res;
        int selIndex = getSelectedIndex();
        MarketWatchCell currentRow = (MarketWatchCell) get(this, selIndex);
        if (currentRow.type == MarketWatchCell.TYPE_HEADER_CELL) {
            if (amount > 0) {
                setSelectedIndex(selIndex + 1);
            } else if (selIndex > 0) {
                setSelectedIndex(selIndex - 1);
            } else if (selIndex == 0) {
                UiApplication.getUiApplication().invokeLater(new Runnable() {
                    public void run() {
                        Screen scr = UiApplication.getUiApplication().getActiveScreen();
                        Class tmp10_7 = MarketWatch.class$0;

                        // TODO Genate code have problem
                        if (tmp10_7 == null) {
                            // tmp10_7;
                            try {
                                Class tmpTernaryOp = (MarketWatch.class$0 = Class
                                        .forName("pvn.com.screens.TitleScreen"));
                            } catch (ClassNotFoundException localClassNotFoundException) {
                                throw new NoClassDefFoundError(localClassNotFoundException
                                        .getMessage());
                            }
                        }
                        if (tmp10_7.isInstance(scr)) {
                            TitleScreen parent = (TitleScreen) scr;
                            parent.mToolbar.setFocus();
                        }
                    }
                });
            }
        }
        return res;
    }
}